



"""
数据库迁移脚本，用于更新keyword_configs表结构
"""

import sqlite3
import os


def migrate_keyword_configs():
    """迁移keyword_configs表，移除旧的唯一约束，添加新的基于三字段的唯一索引"""
    
    # 获取数据库路径
    project_root = os.path.dirname(os.path.abspath(__file__))
    db_path = os.path.join(project_root, 'data', 'video_database.db')
    
    if not os.path.exists(db_path):
        print(f"数据库文件不存在: {db_path}")
        return False
    
    try:
        with sqlite3.connect(db_path) as conn:
            cursor = conn.cursor()
            
            # 检查是否已经存在新的索引
            cursor.execute("SELECT name FROM sqlite_master WHERE type='index' AND name='idx_keyword_langs'")
            if cursor.fetchone():
                print("数据库已经迁移过了，无需重复操作")
                return True
            
            # 由于SQLite不支持直接删除列上的约束，我们需要重新创建表
            # 1. 重命名现有表
            cursor.execute("ALTER TABLE keyword_configs RENAME TO keyword_configs_old")
            
            # 2. 创建新的表结构
            cursor.execute("""
                CREATE TABLE keyword_configs (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    keyword TEXT NOT NULL,
                    count INTEGER NOT NULL DEFAULT 5,
                    enabled BOOLEAN NOT NULL DEFAULT 1,
                    last_run_time TIMESTAMP,
                    create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    platform TEXT NOT NULL DEFAULT 'douyin',
                    source_lang TEXT NOT NULL DEFAULT 'zh',
                    target_lang TEXT NOT NULL DEFAULT 'vi'
                )
            """)
            
            # 3. 复制数据
            cursor.execute("""
                INSERT INTO keyword_configs 
                (id, keyword, count, enabled, last_run_time, create_time, platform, source_lang, target_lang)
                SELECT id, keyword, count, enabled, last_run_time, create_time, platform, source_lang, target_lang
                FROM keyword_configs_old
            """)
            
            # 4. 创建新的唯一索引
            cursor.execute("""
                CREATE UNIQUE INDEX idx_keyword_langs 
                ON keyword_configs(keyword, source_lang, target_lang)
            """)
            
            # 5. 删除旧表
            cursor.execute("DROP TABLE keyword_configs_old")
            
            conn.commit()
            print("数据库迁移完成")
            return True
            
    except Exception as e:
        print(f"数据库迁移失败: {e}")
        return False


if __name__ == "__main__":
    migrate_keyword_configs()